import java.util.HashMap;
import java.util.Map;

/**
 * @作者 钟先崟
 * @时间 2023-02-25 12:32
 * @说明 1624. 两个相同字符之间的最长子字符串
 * 给你一个字符串 s，请你返回 两个相同字符之间的最长子字符串的长度 ，计算长度时不含这两个字符。如果不存在这样的子字符串，返回 -1 。
 * 子字符串 是字符串中的一个连续字符序列。
 * 示例 4：
 * 输入：s = "cabbac"
 * 输出：4
 * 解释：最优的子字符串是 "abba" ，其他的非最优解包括 "bb" 和 "" 。
 */
public class Solution {
    public static void main(String[] args) {
        System.out.println(maxLengthBetweenEqualCharacters("cabacaca"));
        System.out.println(maxLengthBetweenEqualCharacters("scayofdzca"));
    }

    /**
     *执行用时：
     * 1 ms
     * , 在所有 Java 提交中击败了
     * 68.95%
     * 的用户
     * 内存消耗：
     * 39.6 MB
     * , 在所有 Java 提交中击败了
     * 30.60%
     * 的用户
     * @param s
     * @return
     */
    public static int maxLengthBetweenEqualCharacters(String s) {
        int[][] record = new int[3][26];
        for (int i = 0; i < 26; i++) {
            record[0][i] = -1;
            record[1][i] = -1;
        }
        for (int i = 0; i < s.length(); i++) {
            if (record[0][s.charAt(i) - 'a'] == -1)
                record[0][s.charAt(i) - 'a'] = i;
            else {
                record[1][s.charAt(i) - 'a'] = record[1][s.charAt(i) - 'a'] + i - record[0][s.charAt(i) - 'a'];
                record[0][s.charAt(i) - 'a'] = i;
            }
        }
        int max = -1;
        for (int i = 0; i < 26; i++) {
            if (record[1][i] > max)
                max = record[1][i];
        }
        return max;
    }
}
